package main

import "fmt"

type student struct {
	Name string
	Age  int
}

func paseStudent() map[string]*student {
	m := make(map[string]*student)
	stus := []student{
		{Name: "zhou", Age: 24},
		{Name: "li", Age: 23},
		{Name: "wang", Age: 22},
	}
	for _, stu := range stus {
		fmt.Printf("%v\t%p\n", stu, &stu)
		// 存在问题
		//通过上面的案例，我们不难发现stu变量的地址始终保持不变，每次遍历仅进行struct值拷贝，
		// 故m[stu.Name]=&stu实际上一直指向同一个地址，最终该地址的值为遍历的最后一个struct的值拷贝。

		// 正确
		//stu2 := stus[]
		//m[stu.Name] = &stu2

		// 错误
		m[stu.Name] = &stu
	}
	return m
}

func main() {
	students := paseStudent()
	fmt.Println("----------")
	for k, v := range students {
		fmt.Printf("key=%s,value=%v \n", k, v)
	}
}
